package com.andaily.service;

import com.andaily.domain.dto.account.*;

import java.util.List;

/**
 * @author Shengzhao Li
 */
public interface AccountService {

    AccountFormDTO loadAccountFormDTO(String accountGuid);

    List<AccountTypeDTO> loadAvailableAccountTypes();

    void persistAccount(AccountFormDTO accountFormDTO);

    void updateAccountTypeUsedTimes(String guid, int newTimes);

    AccountOverviewDTO loadAccountOverview(AccountOverviewDTO accountOverviewDTO);

    int loadTotalAccount();

    AccountDTO loadByGuid(String guid);

    void archivedAccount(String guid);

    AccountTypeOverviewDTO loadAccountTypeOverview(AccountTypeOverviewDTO accountTypeOverviewDTO);

    AccountTypeDTO loadAccountType(String guid);

    void persistAccountType(AccountTypeDTO accountType);

    void archivedAccountType(String guid);

    AccountSearchResultDTO searchAccount(AccountSearchDTO accountSearchDTO);

    AccountSettingDTO loadAccountSettingDTO();

    boolean updateAccountSetting(AccountSettingDTO accountSetting);

    void cleanUpAccount(String accountGuid);

    boolean revertAccount(String accountGuid);

    AccountStatisticsDTO loadAccountStatistics(AccountStatisticsDTO statisticsDTO);

    AccountDailyStatisticsDTO loadDailyStatistics(AccountDailyStatisticsDTO dailyStatisticsDTO);

    AccountStatisticsDetailsDTO loadStatisticsDetails(AccountStatisticsDetailsDTO statisticsDetailsDTO);

    AccountTypeStatisticsDTO loadTypeStatistics(AccountTypeStatisticsDTO typeStatisticsDTO);

    AccountTypeChartDto loadTypeChartData();

    AccountDailyChartDto loadDailyChartData();

    AccountPaymentsStatisticsDto loadAccountPaymentsStatisticsDto();

    AccountMonthStatisticsDTO loadMonthStatistics(AccountMonthStatisticsDTO monthStatisticsDTO);

    AccountMonthChartDto loadMonthChartData();
}
